package Controllers;

import java.io.IOException;
import java.util.Enumeration;
import java.util.HashSet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Models.Etudiant;
import Models.Groupe;
import Models.Module;

@SuppressWarnings("serial")
public class NotesController extends MainController {
	
	private String selectView, addView, confirmView;
	
	public void init() throws ServletException {
		this.selectView	= this.getInitParameter("view_select");
		this.addView	= this.getInitParameter("view_add");
		this.confirmView= this.getInitParameter("view_confirm");
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String method = request.getMethod().toLowerCase();
		String action = request.getPathInfo();
		if (action == null) {
			action = "/";
			System.out.println("action == null");
		}
		// Si on ajoute une note et qu'on a sélectionné le groupe et le module
		if (method.equals("post") && action.equals("/add")) {
			this.add(request, response);
		} 
	}
	
	/**
	 * Dispatcher vers les différentes fonctions finales d'action en fonction de l'action appelée
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		String method = request.getMethod().toLowerCase();
		String action = request.getPathInfo();
		if (action == null) {
			action = "/";
			System.out.println("action == null");
		}
		// Si on ajoute une note
		if (method.equals("get") && action.equals("/add")) {
			request.setAttribute("title", "Ajouter une note");
			this.select(request, response);
		}
	}
	
	/**
	 * Ajout de notes, est appelé lors d'un premier post (sélection groupe/module)
	 * 
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// Si on a posté le formulaire d'ajout de note
		if (request.getParameter("note") != null) {
			Enumeration<String> params = request.getParameterNames();
			// Pour chaque étudiant, on récupère la note que l'on a affecté
			while (params.hasMoreElements()) {
				String idEtudiant = params.nextElement();
				Integer note = 0;
				if (!idEtudiant.equals("note") && !request.getParameter(idEtudiant).isEmpty()) {
					note = Integer.parseInt(request.getParameter(idEtudiant));
				}
				// On sauvegarde l'étudiant et la note associée
			}
			request.setAttribute("title", "Notes ajoutées");
			this.loadJSP(this.confirmView, request, response);
		} else {
			// On récupère le groupe, les étudiants associés et le module pour le quel on affecte la note
			HashSet<Etudiant> listEtu = new HashSet<Etudiant>();
			listEtu.add(new Etudiant(1, 1, "Florian", "PARRENO", null, null, null, null));
			listEtu.add(new Etudiant(2, 1, "Pierre-Julien", "MARTINEZ", null, null, null, null));
			listEtu.add(new Etudiant(3, 1, "Tanguy", "RIONDET", null, null, null, null));
			
			Groupe groupe = new Groupe(1, "MIAM", listEtu);
			Module module = new Module(1, "SIL-4", "Super module", null, null);
			
			request.setAttribute("groupe", groupe);
			request.setAttribute("module", module);
			request.setAttribute("title", "Ajouter les notes pour le groupe " + groupe.getNom() +" dans le module " + module.getNom());
			this.loadJSP(this.addView, request, response);
		}
	}
	
	/**
	 * Selection du module et groupe pour le quel on veut mettre les notes
	 * 
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	private void select(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// On récupère la liste des groupes
		HashSet<Groupe> listGroup = new HashSet<Groupe>();
		listGroup.add(new Groupe(1, "MIAM", null));
		listGroup.add(new Groupe(2, "SIMO", null));
		listGroup.add(new Groupe(3, "MESSI", null));
		
		// On récupère la liste des modules disponibles pour le groupe
		HashSet<Module> listModule = new HashSet<Module>();
		listModule.add(new Module(1, "SIL-4", "Super module !", null, null));
		listModule.add(new Module(2, "SIL-2", "Autre super module !", null, null));
		listModule.add(new Module(3, "SIL-1", "GWT", null, null));
		listModule.add(new Module(4, "SIL-5", "Dev PHP Symfony", null, null));
		
		request.setAttribute("groupes", listGroup);
		request.setAttribute("modules", listModule);
		this.loadJSP(this.selectView, request, response);
	}
}
